﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using Entidades.Sistema.Base;

namespace Mapping.Sistema.Base
{
    public static class MappingCargo
    {
        public static List<Cargo> ConsultarCargos()
        {
            try
            {
                SqlCommand cmdCargos = new SqlCommand();
                cmdCargos.CommandText = "sp_ConsultarCargo";
                cmdCargos.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();

                SqlDataReader drCargos = cmdCargos.ExecuteReader();


                List<Cargo> ColCargoes = new List<Cargo>();

                while (drCargos.Read())
                {
                    Cargo oCargo = new Cargo();
                    oCargo.IdCargo = Convert.ToInt32(drCargos["Id_Cargo"]);
                    oCargo.Nombre = drCargos["Nombre"].ToString();
                    oCargo.Descripcion = drCargos["Descripcion"].ToString();
                    oCargo.HabilitadoProduccion = Convert.ToBoolean(drCargos["HabilitadoProduccion"]);

                    SqlCommand cmd2UCargos = new SqlCommand();
                    cmd2UCargos.CommandText = "sp_ConsultarCargosGrupos";
                    cmd2UCargos.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd2UCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                    cmd2UCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
                    SqlDataReader drCargosGrupos = cmd2UCargos.ExecuteReader();

                    while (drCargosGrupos.Read())
                    {
                        Entidades.Seguridad.Grupo oGrupo = new Entidades.Seguridad.Grupo();
                        oGrupo.IdGrupo = (drCargosGrupos["Id_Grupo"]).ToString();
                        oGrupo.Descripcion = (drCargosGrupos["Descripcion"]).ToString();
                        oCargo.AgregarGrupo(oGrupo);

                    }

                    ColCargoes.Add(oCargo);
                }

                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColCargoes;
            }
            catch (Exception ex)
            {
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                throw (ex);
            }
        }

        public static Cargo ConsultarCargoPorClave(int idcargo)
        {
            try
            {
                SqlCommand cmdCargos = new SqlCommand();
                cmdCargos.CommandText = "sp_ConsultarCargoPorClave";
                cmdCargos.CommandType = System.Data.CommandType.StoredProcedure;
                cmdCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = idcargo;
                SqlDataReader drCargos = cmdCargos.ExecuteReader();

                Cargo oCargo = new Cargo();

                while (drCargos.Read())
                {
                    oCargo.IdCargo = Convert.ToInt32(drCargos["Id_Cargo"]);
                    oCargo.Nombre =  drCargos["Nombre"].ToString();
                    oCargo.Descripcion = drCargos["Descripcion"].ToString();
                    oCargo.HabilitadoProduccion = Convert.ToBoolean(drCargos["HabilitadoProduccion"]);

                    SqlCommand cmd2UCargos = new SqlCommand();
                    cmd2UCargos.CommandText = "sp_ConsultarCargosGrupos";
                    cmd2UCargos.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd2UCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                    cmd2UCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
                    SqlDataReader drCargosGrupos = cmd2UCargos.ExecuteReader();


                    while (drCargosGrupos.Read())
                    {
                        Entidades.Seguridad.Grupo oGrupo = new Entidades.Seguridad.Grupo();
                        oGrupo.IdGrupo = (drCargosGrupos["Id_Grupo"]).ToString();
                        oGrupo.Descripcion = drCargosGrupos["Descripcion"].ToString();
                        oCargo.AgregarGrupo(oGrupo);

                    }

                }
                return oCargo;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        public static bool AgregarCargo(Cargo oCargo)
        {
            SqlCommand cmdCargo = new SqlCommand();
            cmdCargo.CommandText = "sp_AgregarCargo";
            cmdCargo.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdCargo.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdCargo.Parameters.Add("@Id_Cargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
            cmdCargo.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oCargo.Nombre;
            cmdCargo.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 200).Value = oCargo.Descripcion;
            cmdCargo.Parameters.Add("@HabilitadoProduccion", System.Data.SqlDbType.Bit).Value = oCargo.HabilitadoProduccion;
            cmdCargo.ExecuteNonQuery();
            
            foreach (Entidades.Seguridad.Grupo grupoo in oCargo.Grupos)
            {
                SqlCommand cmdGruposCargos = new SqlCommand();
                cmdGruposCargos.CommandText = "sp_AgregarGrupoCargo";
                cmdGruposCargos.CommandType = System.Data.CommandType.StoredProcedure;
                cmdGruposCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdGruposCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
                cmdGruposCargos.Parameters.Add("@IdGrupo", System.Data.SqlDbType.VarChar).Value = grupoo.IdGrupo;
                cmdGruposCargos.ExecuteNonQuery();
            }

            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");

            return true;
        }

        public static int ModificarCargo(Cargo oCargo)
        {
            SqlCommand cmdCargo = new SqlCommand();
            cmdCargo.CommandText = "sp_ModificarCargo";
            cmdCargo.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdCargo.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdCargo.Parameters.Add("@Id_Cargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
            cmdCargo.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar).Value = oCargo.Nombre;
            cmdCargo.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 200).Value = oCargo.Descripcion;
            cmdCargo.Parameters.Add("@HabilitadoProduccion", System.Data.SqlDbType.Bit).Value = oCargo.HabilitadoProduccion;
            int nro = Convert.ToInt32(cmdCargo.ExecuteScalar());

            SqlCommand cmdEliminarGruposCargos = new SqlCommand();
            cmdEliminarGruposCargos.CommandText = "sp_EliminarGruposCargos";
            cmdEliminarGruposCargos.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarGruposCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarGruposCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
            cmdEliminarGruposCargos.ExecuteNonQuery();

            foreach (Entidades.Seguridad.Grupo grupoo in oCargo.Grupos)
            {

                SqlCommand cmdGruposCargos = new SqlCommand();
                cmdGruposCargos.CommandText = "sp_AgregarGrupoCargo";
                cmdGruposCargos.CommandType = System.Data.CommandType.StoredProcedure;
                cmdGruposCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdGruposCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
                cmdGruposCargos.Parameters.Add("@IdGrupo", System.Data.SqlDbType.VarChar).Value = grupoo.IdGrupo;
                cmdGruposCargos.ExecuteNonQuery();
            }
            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");

            return nro;
        }

        public static bool EliminarCargo(Cargo oCargo)
        {
            SqlCommand cmdEliminarCargo = new SqlCommand();
            cmdEliminarCargo.CommandText = "sp_EliminarCargo";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdEliminarCargo.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarCargo.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarCargo.Parameters.Add("@Id_Cargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
            cmdEliminarCargo.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            SqlCommand cmdEliminarGruposCargos = new SqlCommand();
            cmdEliminarGruposCargos.CommandText = "sp_EliminarGruposCargos";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdEliminarGruposCargos.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarGruposCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarGruposCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
            cmdEliminarGruposCargos.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;

            //SqlCommand cmdCargos= new SqlCommand();
            //cmdCargos.CommandText = "sp_EliminarCargo";
            //Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            //cmdCargos.CommandType = System.Data.CommandType.StoredProcedure;
            //cmdCargos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            //cmdCargos.Parameters.Add("@IdCargo", System.Data.SqlDbType.Int).Value = oCargo.IdCargo;
            //cmdCargos.ExecuteNonQuery();
            //Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
        }
    }
}
